/*
 * Framework.h
 *
 *  Created on: 2011/06/05
 *      Author: naoki
 */

#ifndef FRAMEWORK_H_
#define FRAMEWORK_H_

#include "NTEngine/NTEngine.h"
#include "NTEngine/Base/DebugStream.h"

namespace NTEngine {

/**
 * @brief Framework
 */
class Framework {
public:
	enum LoadMode{
		LOAD_ARCHIVE_FIRST,
		LOAD_DIRECT_FIRST,
		LOAD_ARCHIVE_ONLY,
	};
	class Configuration {
	public:
		void requestFps( unsigned );
		void enableDepthStencil( bool );
		void enableAntialias( bool );
		void enableAnisotropicFilter( bool );
		void translucent( bool );

		///アーカイブ数決定
		void setArchiveNumber( int );
		///アーカイブ名設定
		void setArchiveName( int index, const char* );
		///ロードモード設定
		void setLoadMode( LoadMode );

		void loadFile( string* out, const char* filename, int dir = 0 ) const;
	};
public:
	/**
	 * @brief Frameworkインスタンスを取得します
	 * これはinstance()と同じ動作をします
	 */
	Framework();

	/**
	 * @brief Frameworkインスタンスを取得します
	 */
	static Framework instance();

	/**
	 * @brief 現在のフレームレートを取得します。
	 */
	float frameRate() const;

	/**
	 * @brief 経過時間を取得します。単位はms
	 */
	unsigned elapsedTime() const;

	/**
	 * @brief ユーザ定義起動時コンフィグ
	 */
	void configure( Configuration );

	/**
	 * @brief ユーザ定義初期化時処理
	 */
	void initialize();

	/**
	 * @brief ユーザ定義更新時処理
	 */
	void update();

	/**
	 * @brief ユーザ定義終了時処理
	 */
	void terminate();
#if 1
	/**
	 *
	 */
	void onResume();

	/**
	 *
	 */
	void onPause();
#endif
};

} // namespace NTEngine

#endif /* FRAMEWORK_H_ */
